Splunk でログの自動生成するApp Eventgen を使ってみる
SIEM製品を使っていると、検知クエリを試してみたり、可視化Appを試してみたりするのに実際のログが無くて困ったりするときがあります。
Splunk ではそんな時にログを自動生成してくれるAppがあります。
Eventgen というAppで、コンフィグファイルに従ったフォーマットのログをある一定の量を一度にあるいは定期的に出力させることができます。
また、ログの内容をランダマイズ化させたり、出力する量をランダマイズさせることができるため、実際の運用で出力されたログさながらのシミュレーションも行えたりします。
こちらのAppは、Utilitiesのカテゴリで3位のランキング(上位)なので、使っている方も多く人気のAppであることが伺えます。
本記事では以下の内容についてご紹介します。
- Eventgenのインストール
- チュートリアルでログを自動生成
- Windows Event Logを自動生成
では早速使っていきましょう。
Appをインストールする
Splunkbase上での Eventgen の説明を見ると Splunk Enterprise、Splunk Cloud の両方で利用可能であることが分かります。
Splunk Cloud でもAppをインストールしてはみたのですが、Splunk Cloud のサービスの特徴として、システム内に自分でファイルを設置するようなことが出来ない仕様になっている一方、Eventgen は「eventgen.conf」と呼ばれる設定ファイルを編集してApp内に設置する必要があり、詳細なやり方が分かりませんでした。
Appのマニュアル等も一通り読んでみたのですが、Splunk Cloud でどう使うかは今のところまだ不明です。
ということで、Splunk Enterprise でやってみました。
まずAppのインストールですが、一般的に Splunk の WebUI のAppをインストールする画面からインストールするケースが多いと思うのですが、Splunkbaseからダウンロードしてインストールする方が、設定に必要なファイルを準備するのが簡単なためそちらからインストールします。
こちらにアクセスします。
https://splunkbase.splunk.com/app/1924
Splunkのアカウントでログインしてダウンロードします。
Splunk EnterpriseのWebUIにアクセスして、AppsのManage appに遷移し、ファイルからAppをインストールします。
先ほどダウンロードした、tgzファイルを選択してインストールします。
ログ生成の設定
Appがインストールできたら、ログを生成するためのコンフィグファイルを設定します。
Eventgenでは、「$SPLUNKHOME/etc/apps/
とりあえず、動くかを試してみるのに、公式ドキュメントのチュートリアルをやります。
sample bundleというものが用意されているので、sample_bundle.zipをダウンロードしてきて、解凍します。
解凍してきたファイルに「film.json」と「count10.txt」というファイルがあるので、「$SPLUNKHOME/etc/apps/SA-Eventgen/samples」フォルダにコピーします。
「film.json」の中身を確認してみると、ログの中身のようになっていると思いますが、これが生成されるログになります。
このサンプルのように複数行書いてもいいですし、一行だけ書いてログの一部の内容をランダム化+複製化させたりなど、利用したいケースに合わせてこのようなログを用意します。
{"FILM_ID":0,"DIRECTOR_ID":0,"REGION_ID":0,"TITLE":"CENTERDINOSAUR","DESCRIPTION":"ABeautifulCharacterStudyofaSumoWrestlerAndaDentistwhomustFindaDoginCalifornia","RELEASE_YEAR":2006,"LANGUAGE_ID":1,"ORIGINAL_LANGUAGE_ID":"(null)","RENTAL_DURATION":5,"RENTAL_RATE":4.99,"LENGTH":152,"REPLACEMENT_COST":12.99,"RATING":"PG","SPECIAL_FEATURES":"DeletedScenes","LAST_UPDATE":"2/15/0605:03"} {"FILM_ID":0,"DIRECTOR_ID":0,"REGION_ID":0,"TITLE":"CHAINSAWUPTOWN","DESCRIPTION":"ABeautifulDocumentaryofaBoyAndaRobotwhomustDiscoveraSquirrelinAustralia","RELEASE_YEAR":2006,"LANGUAGE_ID":1,"ORIGINAL_LANGUAGE_ID":"(null)","RENTAL_DURATION":6,"RENTAL_RATE":0.99,"LENGTH":114,"REPLACEMENT_COST":25.99,"RATING":"PG","SPECIAL_FEATURES":"DeletedScenes,BehindtheScenes","LAST_UPDATE":"2/15/0605:03"} {"FILM_ID":0,"DIRECTOR_ID":0,"REGION_ID":0,"TITLE":"CHAMBERITALIAN","DESCRIPTION":"AFatefulReflectionofaMooseAndaHusbandwhomustOvercomeaMonkeyinNigeria","RELEASE_YEAR":2006,"LANGUAGE_ID":1,"ORIGINAL_LANGUAGE_ID":"(null)","RENTAL_DURATION":7,"RENTAL_RATE":4.99,"LENGTH":117,"REPLACEMENT_COST":14.99,"RATING":"NC-17","SPECIAL_FEATURES":"Trailers","LAST_UPDATE":"2/15/0605:03"} {"FILM_ID":0,"DIRECTOR_ID":0,"REGION_ID":0,"TITLE":"CHAMPIONFLATLINERS","DESCRIPTION":"AAmazingStoryofaMadCowAndaDogwhomustKillaHusbandinAMonastery","RELEASE_YEAR":2006,"LANGUAGE_ID":1,"ORIGINAL_LANGUAGE_ID":"(null)","RENTAL_DURATION":4,"RENTAL_RATE":4.99,"LENGTH":51,"REPLACEMENT_COST":21.99,"RATING":"PG","SPECIAL_FEATURES":"Trailers","LAST_UPDATE":"2/15/0605:03"} {"FILM_ID":0,"DIRECTOR_ID":0,"REGION_ID":0,"TITLE":"CHANCERESURRECTION","DESCRIPTION":"AAstoundingStoryofaForensicPsychologistAndaForensicPsychologistw ....
「count10.txt」の中身を確認すると、0〜9の数字が書いてあり、こちらはランダム化させたいリストとして利用します。
0 1 2 3 4 5 6 7 8 9
次に解凍したファイルの中に「eventgen.conf」があるので、「$SPLUNKHOME/etc/apps/SA-Eventgen/local」を作ってその配下にコピーします。
コピーした「eventgen.conf」の中身を確認してみます。
[film.json] index = main count = 1000 mode = sample end = 1 autotimestamp = true sourcetype = json source = film.json token.0.token = "FILM_ID":(\d+) token.0.replacementType = integerid token.0.replacement = 0 token.1.token = "REGION_ID":(\d+) token.1.replacementType = seqfile token.1.replacement = $SPLUNK_HOME/etc/apps/sample_bundle/samples/count10.txt
最初にfilm.jsonというスタンザが定義されていて、そのApp内のsamplesフォルダの下にここに書いた名前のファイルがないかを探しに行きます。
それぞれの設定オプションの使い方は、こちらを参照すると何となく分かるかと思います。
注意すべき点は「index=」は生成したログを格納するインデックス先になりますが、そもそもこのインデックスが作られていないとログが生成できませんので、既にあるものか、新しく作成する必要があります。
「token.
「token.1.replacement=」で指定しているファイルを参照してそのリストの内容を置き換えます。
ここでは、Appの部分のパスが「SA-Eventgen」になっているので、コンフィグファイルを書き換える必要があります。
token.1.replacement = $SPLUNK_HOME/etc/apps/SA-Eventgen/samples/count10.txt
Eventgen Appの有効化
Appsの設定で Eventgen を有効化しておきます。
Appの権限設定
先ほど以下のような説明をしたのですが、
Eventgenでは、「$SPLUNKHOME/etc/apps/
/local」の下にあるeventgen.confの内容に従ってログを生成するようになっています。
Eventgen のApp以外の場所に「eventgen.conf」を置いた場合そのAppのパーミッションに気をつけます。
「eventgen.conf」のあるAppの権限において、その他のAppからEveryoneで読み取りが出来るように設定しておきます。
Appsのpermissionsから設定しておきます。
ログインプットの有効化
Eventgen からのログのインジェストを受け付けるように設定します。
SettingsのData inputで「SA-Eventgen」を有効化します。
サービスのリスタート
コンソールでSplunk Enterpriseをリスタートさせます。
$SPLUNKHOME/bin/splunk restart
検索すると、データが生成されていることが確認できたので、自動生成が一通り出来ました。
Windows Event Log を自動生成する
最後にWindows Event Logを自動生成してみようと思います。
まず、生成するログのサンプルが必要になります。
Windows Event Log用のEventgenの設定ファイルを公開していただいている方がいらっしゃいますので、活用させていただきます。
https://github.com/my2ndhead/TA-microsoft-windows
再び再掲になりますが、以下のようにご紹介しました。
Eventgenでは、「$SPLUNKHOME/etc/apps/
/local」の下にあるeventgen.confの内容に従ってログを生成するようになっています。
生成するログの種類毎にAppを分けておけば、設定ファイルやログの元となるsamplesフォルダの中身がごちゃ混ぜにならないので、管理上おすすめかと思います。
独自にAppを作成して設定していくことが可能なのでやってみます。
AppsのManage Appsにいき、画面遷移後に右上のCreate Appを選択します。
名前やAppのフォルダーパス名などを入力して作成します。自分の好きな名前でOKです。
「dummylogs_eventgen」という名前にしたので、このパスが$SPLUNKHOME/etc/appsにできています。
先程のリポジトリも git clone しておきます。
以下のような構成になっていますので、samplesフォルダとlookupsフォルダごと「$SPLUNKHOME/etc/apps/dummylogs_eventgen」配下にコピーします。
また、defaultの下の「eventgen.conf」も「$SPLUNKHOME/etc/apps/dummylogs_eventgen/local」にコピーします。
TA-microsoft-windows ├── README.txt ├── default │ ├── eventgen.conf │ ├── ... │ └── ... ├── lookups │ ├── windows_msdhcp_id.csv │ ├── ... ├── metadata │ └── default.meta └── samples ├── AppPopup.26.windows ├── CPUTime.perfmon ├── ...
「eventgen.conf」のindexなどは存在するものにしておておきます。
次に、忘れずに作成したAppの権限を設定します。
そして、サービスをリスタートします。
$SPLUNKHOME/bin/splunk restart
Windows Event Log を含むWindowsの様々なログが出力することができました。
まとめ
ログ分析の準備を行っていくうえで、事前に想定するログに対してどんなクエリをかけるかをアラーティングしたり、可視化しておいたりすることは非常に重要です。
特定の検出クエリであれば、こちらのブログで紹介しているAttackDataを活用するのが有効な場合もあるかと思いますが、データの可視化などまとまったログが必要な時などは、Eventgenを活用するのが良いかと思いました。
ぜひみなさまのご参考になれば幸いです。